#习题11 创建一个基类Animal，并定义一个speak方法。然后创建两个子类Dog和Cat，分别重写speak方法以表现不同的行为。
class Animal:
    def speak(self):
        raise NotImplementedError("Subclass must implement the speak() method")

    def animal_speak(self,animal):
        animal.speak()

class Dog(Animal):
    def speak(self):
        print('Woof !')

class Cat(Animal):
      def speak(self):
          print('miao miao!')

#习题12 使用多态性，创建一个函数animal_speak，它接受一个Animal类型的参数并调用其speak方法。测试这个函数，传入Dog和Cat的实例。

if __name__ == '__main__':
    dog = Dog()
    cat = Cat()
    a=Animal()
    #父类的引用，指向子类对象
    a.animal_speak(dog)
    a.animal_speak(cat)